Cryptography involves the enciphering and deciphering of messages in secret code or cipher. Cryptography may deal with all aspects of secure messaging, authentication, digital signatures, and the like. The processing involved in such activities may involve complicated mathematical calculations. These calculations are the implementation of cryptographic algorithms. Such calculations have been implemented in software. Software implementations have advantages such as being relatively easy to update. This may be e.g. effectuated by downloading new software to the platform (i.e. hardware) running these algorithms.
Implementing algorithms in software, however, may have several shortcomings. Software implementations of algorithms typically are not able to process information as quickly has hardware implementations. Thus, in speed sensitive applications, frequently specialized hardware is utilized to perform at least a portion of the cryptography related functions.
One method of taking advantage of the speed of the hardware while maintaining the flexibility of software is to utilize programmable logic devices that are capable of being reprogrammed. In a hardware implementation utilizing such logic devices, flexibility may be maintained by the ability to reprogram logic to provide for different implementations as needed. However, by still providing for the operation in hardware, quicker implementations may be achieved as compared to software only implementations.
Whether a cryptographic application is implemented in hardware or software, testing, configuration and/or verification have to be performed prior to its deployment. As described earlier, possible arrangements from successive permutations can become very large, very fast, thus make such testing, configuration, and verification extremely difficult.